iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
自我挑戰組

模仿知名網站的外觀系列 第 4

【Day4】模仿知名網站的外觀 Instagram(4) 設定側邊欄的按鈕事件與個人檔案頁面

  • 分享至 

  • xImage
  •  

上回我們完成了側邊欄的外觀,這次我們繼續完善側邊欄的功能,讓按下去時字體和icon會有變化。

我們先回到Router.jsx,添加分割線,提升我們的專案與真Instagram相似度。

<div className="w-[20%] border">
	<Sidebar />
</div>

w-[20%]代表側邊欄大小佔整個網頁20%的寬度,是我們自訂的屬性。

border:設定邊界。

接下來我們要開始撰寫按下去的事件,來到Sidebar.jsx,在return區塊前添加以下內容:

const [activeTab, setActiveTab] = setState([]);
	const navigate = useNavigate();

	const handleTabClick = (title) => {
		setActiveTab(title);
		//點擊Profile按鈕時,跳到/username
		if (title === "Profile") {
			navigate("/username");
		}
		//點擊Home按鈕時,跳到/
		else if (title === "Home") {
			navigate("/");
		}
	};

記得import使用到的library

import { useState } from "react";
import { useNavigate } from "react-router-dom";

我們編寫好事件,接下來讓按鈕點下去會發生事件,同樣是Sidebar.jsx,來到menu.map區塊修改內部內容。

<div
	onClick={() => handleTabClick(item.title)}
	className="flex items-center cursor-pointer mb-5 text-lg"
>
	{activeTab === item.title ? item.activeIcon : item.icon}
	<p
		className={`${
			activeTab === item.title ? "font-bold" : "font-semibold"
		}`}
	>
		{item.title}
	</p>
</div>

除了Search和Profile以外,按下各個按鈕就可以看到變化,因為Search和Profile的activeIcon跟icon是相同的。

圖為按下Home之後的變化。

接下來,我們要開始寫Profile部分。

在Components下,新增ProfileComponents資料夾。

在ProfileComponents下,新增ProfileUserDetails.jsx。
在Pages下,新增Profile資料夾。

在Profile下,新增Profile.jsx。

ProfileComponents資料夾:用來儲存Profile會用到的Components。

ProfileUserDetails.jsx:用來顯示個人資料的內容。

Profile.jsx:用來顯示Profile的內容。

Profile.jsx的程式碼如下:

import React from 'react'

const Profile = () => {
  return (
    <div>Profile</div>
  )
}

export default Profile

修改Router.jsx,增加切換至Profile的功能。

在開頭先導入Profile.jsx

import Profile from "../Profile/Profile"

在<Route path="/" element={} />下,添加以下內容:

<Route path="/username" element={<Profile />} />

現在可以啟動專案,按Profile就能觀察到右側從HomePage變成Profile了,網址也有變化。

下回,我們將編寫Profile裏面的內容。


上一篇
【Day3】模仿知名網站的外觀 Instagram(3) 側邊欄的外觀設計
下一篇
【Day5】模仿知名網站的外觀 Instagram(5) 完成個人檔案頁面
系列文
模仿知名網站的外觀30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言